﻿/*
 * 2021.03.27-Code rectification and function enhancement.
 *            Huawei Device Co., Ltd. <mobile@huawei.com>
 */

#ifndef GifAnimUI_h__
#define GifAnimUI_h__

#pragma once

namespace DuiLib {
class CControl;

constexpr int EVENT_TIEM_ID = 100;

class UILIB_API CGifAnimUI : public CControlUI {
    DECLARE_DUICONTROL(CGifAnimUI)
public:
    CGifAnimUI(void);
    ~CGifAnimUI(void);

    LPCTSTR GetClass() const;
    LPVOID GetInterface(LPCTSTR pstrName);
    void DoInit() override;
    void DoPaint(HDC hDC, const RECT &rcPaint) override;
    void DoEvent(TEventUI &event) override;
    void SetVisible(bool bVisible = true) override;
    void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) override;
    void SetBkImage(LPCTSTR pStrImage);
    LPCTSTR GetBkImage();

    void SetAutoPlay(bool bIsAuto = true);
    bool IsAutoPlay() const;
    void SetAutoSize(bool bIsAuto = true);
    bool IsAutoSize() const;
    void PlayGif();
    void PauseGif();
    void StopGif();

private:
    void InitGifImage();
    void DeleteGif();
    void OnTimer(UINT_PTR idEvent);
    void DrawFrame(HDC hDC); // 绘制GIF每帧
    Gdiplus::Image *LoadGifFromFile(LPCTSTR pstrGifPath);
    Gdiplus::Image *LoadGifFromMemory(LPVOID pBuf, size_t dwSize);

private:
    Gdiplus::Image *m_pGifImage;
    UINT m_nFrameCount;                     // gif图片总帧数
    UINT m_nFramePosition;                  // 当前放到第几帧
    Gdiplus::PropertyItem *m_pPropertyItem; // 帧与帧之间间隔时间

    CDuiString m_sBkImage;
    bool m_bIsAutoPlay; // 是否自动播放gif
    bool m_bIsAutoSize; // 是否自动根据图片设置大小
    bool m_bIsPlaying;
};
}

#endif // GifAnimUI_h__
